#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

typedef int ElemSet; /* 默认元素为整型 */
typedef int Position; /* 数组下标是元素位置 */
typedef ElemSet *SegTree;
#define kMaxNum 1e9

ElemSet Min(ElemSet x, ElemSet y) {
    return (x < y) ? x : y;
}

/* 算法12-1：求最小值线段树的初始化 BuildSegTree(seg_tree, array, l, r, p) */
void BuildSegTree(SegTree seg_tree, ElemSet array[], int l, int r, Position p) {
    Position m, lp, rp;

    if (l == r) {
        seg_tree[p] = array[l]; /* 在叶结点存储数据 */
    } else {
        m = (l + r) >> 1; /* 二分的中点位置 */
        lp = (p << 1); /* 左孩子位置 */
        rp = lp + 1; /* 右孩子位置 */
        BuildSegTree(seg_tree, array, l, m, lp);
        BuildSegTree(seg_tree, array, m + 1, r, rp);
        seg_tree[p] = Min(seg_tree[lp], seg_tree[rp]); /* 求最小值 */
    }
}
/* 算法12-1 结束 */

/* 算法12-2：求最小值线段树的点更新 Update(seg_tree, l, r, p, idx, value) */
void Update(SegTree seg_tree, int l, int r, Position p, Position idx,
            ElemSet value) {
    Position m, lp, rp;

    if (l == r) {
        seg_tree[p] = value; /* 更新叶结点 */
    } else {
        m = (l + r) >> 1; /* 二分的中点位置 */
        lp = (p << 1); /* 左孩子位置 */
        rp = lp + 1; /* 右孩子位置 */
        if (idx <= m) {
            Update(seg_tree, l, m, lp, idx, value);
        } else {
            Update(seg_tree, m + 1, r, rp, idx, value);
        }
        seg_tree[p] = Min(seg_tree[lp], seg_tree[rp]); /* 求最小值 */
    }
}
/* 算法12-2 结束 */

/* 算法12-3：求最小值线段树的区间查询 Query(seg_tree, l, r, p, ql, qr) */
ElemSet Query(SegTree seg_tree, int l, int r, Position p, int ql, int qr) {
    ElemSet ret, left, right;
    Position m, lp, rp;

    if ((qr < l) || (ql > r)) { /* [ql, qr]与[l,r]完全无交集 */
        ret = kMaxNum; /* 返回一个大常数 */
    } else if ((ql <= l) && (r <= qr)) { /* [ql, qr]完全包含[l,r] */
        ret = seg_tree[p];
    } else { /* [ql, qr]与[l,r]有交集 */
        m = (l + r) >> 1; /* 二分的中点位置 */
        lp = (p << 1); /* 左孩子位置 */
        rp = lp + 1; /* 右孩子位置 */
        left = Query(seg_tree, l, m, lp, ql, qr);
        right = Query(seg_tree, m + 1, r, rp, ql, qr);
        ret = Min(left, right);
    }
    return ret;
}
/* 算法12-3 结束 */

/* 算法12-4：求最小值线段树的区间增值更新 RangeUpdate(seg_tree, lazy, l, r, p, ql, qr, c) */
void RangeUpdate(SegTree seg_tree, SegTree lazy, int l, int r, Position p,
                 int ql, int qr, ElemSet c) {
    Position m, lp, rp;

    if ((ql <= l) && (r <= qr)) { /* [ql, qr]完全包含[l,r] */
        lazy[p] += c; /* 加懒惰标记 */
        seg_tree[p] += lazy[p]; /* 更新结点值 */
    } else if ((qr >= l) && (ql <= r)) { /* [ql, qr]与[l,r]有交集 */
        lp = (p << 1); /* 左孩子位置 */
        rp = lp + 1; /* 右孩子位置 */
        if (lazy[p] != 0) { /* 下推懒惰标记，可以写成一个函数调用 */
            seg_tree[lp] += lazy[p]; /* 更新左孩子 */
            lazy[lp] += lazy[p];
            seg_tree[rp] += lazy[p]; /* 更新右孩子 */
            lazy[rp] += lazy[p];
            lazy[p] = 0; /* 清除当前结点seg_tree[p]的懒惰标记 */
        }
        m = (l + r) >> 1; /* 二分的中点位置 */
        RangeUpdate(seg_tree, lazy, l, m, lp, ql, qr, c);
        RangeUpdate(seg_tree, lazy, m + 1, r, rp, ql, qr, c);
        seg_tree[p] = Min(seg_tree[lp], seg_tree[rp]); /* 求最小值 */
    }
}
/* 算法12-4 结束 */
#define kMaxSize 1000

int main(void) {
    ElemSet array[kMaxSize], value, c;
    SegTree seg_tree, lazy;
    Position idx;
    int n, i, ql, qr;

    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        scanf("%d", &array[i]);
    }
    seg_tree = (SegTree)malloc(sizeof(ElemSet) * (4 * n + 1));
    lazy = (SegTree)malloc(sizeof(ElemSet) * (4 * n + 1));
    BuildSegTree(seg_tree, array, 1, n, 1);
    scanf("%d %d", &ql, &qr);
    printf("min[%d, %d] = %d\n", ql, qr, Query(seg_tree, 1, n, 1, ql, qr));
    scanf("%d %d", &idx, &value);
    Update(seg_tree, 1, n, 1, idx, value);
    printf("min[%d, %d] = %d\n", ql, qr, Query(seg_tree, 1, n, 1, ql, qr));
    scanf("%d %d %d", &ql, &qr, &c);
    memset(lazy, 0, sizeof(ElemSet) * (4 * n + 1));
    RangeUpdate(seg_tree, lazy, 1, n, 1, ql, qr, c);
    printf("min[%d, %d] = %d\n", ql, qr, Query(seg_tree, 1, n, 1, ql, qr));

    return 0;
}